(HSP3) sample3 [VideoMixing].hsp

sample\hspdsc\(HSP3) sample3 [VideoMixing].hsp » Plain Format

#include "hspdsc.as"

	// Windows XP 以上のOSで実行する必要があります。
	
	title "DirectShow キャプチャデバイス表示 ビデオミキシング"
	cls 4
	dsc_Init				// 初期化

	// デバイスリスト用の変数を初期化
	sdim devname, dsc_GetDeviceListSize()
	// デバイスリストを変数に格納
	dsc_GetDeviceList devname, 0
	if stat == 0 || stat == -2 : dialog "デバイスが見つかりません" : end

	objsize 300, 20
	combox id, 100, devname
	
	objsize 150,20
	button "デバイスを再生",*play
	button "デバイスを停止",*_stop
	button "プロパティを表示",*prop
	button "解像度プロパティを表示",*prop2
	button "プロパティ表示(自前)",*prop3
	button "キャプチャして表示",*capture
	button "BMPで保存して表示",*savebmp

	button "終了する",*exit
	
stop
	
*play
	// 再生処理
	dsc_SetActiveSel 0
	dsc_Open id, 1, 0, 1, 1
	if stat < 0 : dialog "エラーが発生しました。",1,"DEVICE-ERROR" : stop
	gsel 0, 1
	dsc_Play hwnd, 160, 120, 320, 240
	if stat < 0 : dialog "エラーが発生しました。",1,"CAPTURE-ERROR" : stop

	// ビデオミキシング
	w = dsc_CapW
	h = dsc_CapH

	// ビデオのサイズが0以下だった場合
	if w <= 0 || h <= 0 : dialog "サイズ取得エラー" : stop 

	// 画像読み取り用のウィンドウを作成
	// buffer では HDCが取れないので必ず screen を使用してください。
	// 非表示モードで作成すれば大概の用途では問題ないはずです。

	screen 2, w, h, 2
	color 0, 0, 255 : boxf
	pos w-80, 0
	picload "hsplogo.bmp", 1

	// 青色(0,0,255)がすけるようになります。
	// スケスケHSPのロゴが右上に表示されます。
	dsc_VMRMixImage hdc, 0, 0, w, h, 0.3f, 0.0f, 0.0f, 1.0f, 1.0f, 1, 0, 0, 255
	if stat < 0 : dialog "ミキシング失敗", 1, "MIXING-ERROR" : stop
	gsel 0, 1
stop
*_stop
	// 停止&クローズ
	dsc_Stop
	dsc_Close
stop
*prop
	// 再生中でないと失敗します。
	dsc_FilterProp  hwnd, "Device Filter"
stop
*prop2
	// dsc_playを使う前でないとうまく実行できない為、再生中の場合は一度リセットする。
	dsc_Stop
	dsc_Close							// クローズする
	dsc_Open id, 1, 0, 1, 1				// 再度オープン
	gsel 0, 1
	dsc_DevPinProp hwnd					// ここでプロパティを表示
	dsc_Play hwnd, 160, 120, 320, 240	// 再び再生
stop
*capture
	
	// サイズ取得
	w = dsc_CapW
	h = dsc_CapH

	// ビデオのサイズが0以下だった場合
	if w <= 0 || h <= 0 : dialog "サイズ取得エラー" : stop 

	screen 1, w, h
	dsc_GetImage hdc, 0, 0, w, h
	redraw 1						// これは必ず必要
	gsel 0, 1
stop

*savebmp
	dsc_SaveBMP "test.bmp"
	wait 5							// ちょっと待たせたほうがいいかも
	exist "test.bmp"
	if strsize != -1{
		screen 1, 32, 32
		picload "test.bmp"
		gsel 0,1
	}
stop
	
*exit
	dsc_Stop
	dsc_Close
end

*prop3
	// サイズとFourCCを取得します
	dialog "サイズ:"+dsc_CapW+"x"+dsc_CapH+"\nFourCC:"+dsc_FourCC+"\n"+strf("%2.2ffps",double((1.0 * 10 * 1000 * 1000) / dsc_AvgFrame))
stop